/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#ifndef __EADB8AFB_2289_4a77_955F_F3FEE06E2ECC__
#define __EADB8AFB_2289_4a77_955F_F3FEE06E2ECC__

namespace xos_curl
{

    enum enumCurlOpt
    {
        OS_CURLOPT_URL,
        OS_CURLOPT_HEADERFUNCTION,
        OS_CURLOPT_HEADERDATA,
        OS_CURLOPT_WRITEFUNCTION,
        OS_CURLOPT_WRITEDATA,
        OS_CURLOPT_READFUNCTION,
        OS_CURLOPT_READDATA,
        OS_CURLOPT_NOPROGRESS,
        OS_CURLOPT_NOSIGNAL,
        OS_CURLOPT_PROGRESSFUNCTION,
        OS_CURLOPT_PROGRESSDATA,
        OS_CURLOPT_CONNECTTIMEOUT_MS,
        OS_CURLOPT_CONNECTTIMEOUT,
        OS_CURLOPT_TIMEOUT_MS,
        OS_CURLOPT_TIMEOUT,
        OS_CURLOPT_FOLLOWLOCATION,
        OS_CURLOPT_RANGE,
        OS_CURLOPT_RESUME_FROM,
        OS_CURLOPT_ERRORBUFFER,
        OS_CURLOPT_UPLOAD,
        OS_CURLOPT_INFILESIZE_LARGE,
        OS_CURLOPT_POSTFIELDSIZE_LARGE,
        OS_CURLOPT_POST,
        OS_CURLOPT_HTTPHEADER,
        OS_CURLOPT_POSTFIELDSIZE,
        OS_CURLOPT_POSTFIELDS,
        OS_CURLOPT_MAX_SEND_SPEED_LARGE,
        OS_CURLOPT_MAX_RECV_SPEED_LARGE,
        OS_CURLOPT_LOW_SPEED_LIMIT,
        OS_CURLOPT_LOW_SPEED_TIME,
        OS_CURLOPT_COOKIESESSION,           // cookie, session
        OS_CURLOPT_COOKIELIST,
        OS_CURLOPT_COOKIEFILE,
        OS_CURLOPT_COOKIEJAR,
        OS_CURLOPT_COOKIE
    };

    /////////////////////////////////////////////////////////////////////////////////
    // 
    // curl接口
    // 
    class i_curl : public xos::i_release
    {
    protected:
        virtual ~i_curl(){}

    public:
        // 
        // curl方法
        // 
        virtual int set_opt( int enumOpt, ... ) = 0;
        virtual int perform() = 0;

        // 
        // 退出curl的读取函数
        // 
        virtual int get_quit_read_code() = 0;

        // 
        // 退出http(或其它协议)返回码
        // 
        virtual int get_ret_code() = 0;

        // 
        // reset
        // 
        virtual int reset() = 0;
    };

    /////////////////////////////////////////////////////////////////////////////////
    // 
    // curl管理接口
    // 
    class i_curl_mgr : public xos::i_release
    {
    protected:
        virtual ~i_curl_mgr(){}

    public:
        // 
        // create i_curl
        // 
        virtual i_curl* curl() = 0;

        // 
        // 初始化,反初始化
        // 
        virtual int init() = 0;
        virtual int term() = 0;
    };

    /////////////////////////////////////////////////////////////////////////////////
    // 
    // export function
    // 
    typedef int ( * f_create )( xos_container::i_container * pContainer, i_curl_mgr ** ppv );

} // xos_curl

#endif // __EADB8AFB_2289_4a77_955F_F3FEE06E2ECC__
